python股票数据的爬取与可视化分析

您所在的位置:网站首页 python 股票 python股票数据的爬取与可视化分析

python股票数据的爬取与可视化分析

2023-01-27 10:03| 来源: 网络整理| 查看: 265

前言

 据东方财富网统计最新数据,中国股民人数超1.7亿

伴随着资本市场规模的扩大,投资者数量也在不断增长。据中国证券登记结算有限责任公司的数据,2016年1月,投资者人数正式突破1亿人。

截至2020年10月末,投资者人数达1.74亿人,抛开炒股技术不讲,这么多的股票数据非常难找与统计,但我们能够使用网络爬虫爬取股票的各种详细数据,再将这些数据进行整理与分析。

更直观的观看股票的数据情况从而进行对比

数据来源

雪球网

 

爬虫设计方案

1. 爬虫名称股票数据的爬取和数据清洗与分析

2. 爬取内容与数据特征分析爬取所有股票的信息并进行对比分析

3. 方案概述分析网站的页面结构,找到爬取的位置,制定方案,保存成csv文件

 

网站页面的结构与特征分析

主页中包括了各种市场的股票,而我们从中筛选沪深股市进行爬取,

点击后从网站截图可以看出,该网站有两个结构 分为左区的股市总览,中间这一部分是股票的具体数据,此区域就是我们需要爬取的区域

 

 

 

网站的Htmls 页面解析与 节点(标签)查找方法与遍历方法

 

检查网站源代码 发现有许多数据,此时我们筛选出XHR数据

 

 

 

筛选出后发现一条内容点进去

 

进入后 从中可以得知 总共有4432条数据

 

继续展开发现数据都在列表里面

 

 

 

展开第一条数据,发现第一条数据的名称与网站上的第一条数据相对应

 

 

 

 那么从上推断可以得出4432条是所有股票的记录

然后从股票数据中,来定位数据的标签

 

 

 

 

 

 

 

 

 

 

 

 

 

网络爬虫程序设计

1. 爬取数据(1)股票数据爬取并保存

1 import requests 2 import csv 3 4 5 6 #打开一个文件并命名 7 file = open('data.csv', mode='a', encoding='utf-8', newline='') 8 #使用DictWriter方法以字典形式写入 9 csv_write = csv.DictWriter(file, fieldnames=['股票代码', '股票名称', '当前价', '涨跌额', '涨跌幅', '年初至今', '成交量', '成交额', '换手率', '市盈率(TTM)', 10 '股息率', '市值']) 11 12 csv_write.writeheader() #写入一次表头数据 13 14 15 #原本网页一页最多只能显示90支股票数据,通过查看 结合页数计算 一共有4432支股票数据 修改url中的size 以达到获取全部股票数据 16 url = 'https://xueqiu.com/service/v5/stock/screener/quote/list?page=1&size=4432&order=desc&orderby=percent&order_by=percent&market=CN&type=sh_sz&_=1623304455997' 17 headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"}#遭遇反爬 加请求参数 18 # 发送网络请求 19 response = requests.get(url=url, headers=headers) 20 json_data = response.json() 21 22 # 数据筛选 23 data_list = json_data['data']['list'] 24 for data in data_list: #建立for循环 把列表数据遍历出来 25 # print(data) #解析数据 26 #设置data取键值对 27 data1 = data['symbol'] 28 data2 = data['name'] 29 data3 = data['current'] 30 data4 = data['chg'] 31 if data4: 32 if float(data4) > 0: 33 data4 = '+' + str(data4) 34 else: 35 data4 = str(data4) 36 data5 = str(data['percent']) + '%' 37 data6 = str(data['current_year_percent']) + '%' 38 data7 = data['volume'] 39 data8 = data['amount'] 40 data9 = str(data['turnover_rate'])+'%' 41 data10 = data['pe_ttm'] 42 data11 =data['dividend_yield'] 43 if data11: 44 data11 = str(data['dividend_yield'])+'%' 45 else: 46 data11 = None 47 data12 = data['market_capital'] 48 print(data1, data2, data3, data4, data5, data6, data7, data8, data9, data10, data11, data12,) 49 50 #数据保存 51 data_dict = {'股票代码': data1, '股票名称': data2, '当前价': data3, '涨跌额': data4, '涨跌幅': data5, '年初至今': data6, 52 '成交量': data7, '成交额':data8, '换手率': data9, '市盈率(TTM)': data10, '股息率': data11, '市值': data12, } 53 csv_write.writerow(data_dict)

 

 

2. 数据查看并清洗

1 import pandas as pd 2 import numpy as np 3 #加载csv数据 4 data_df = pd.read_csv('data.csv') 5 #显示头文件 6 data_df.head() 7 #判断数据行中书是否存在缺失值 8 data_df.isnull().any(axis=1)

从中发现还是有缺失值存在,所以我们选择进行用0填充

1 #将缺失值都补为0 2 data_df = data_df.fillna(0) 3 #再次查看数据行中书是否修改成功 4 data_df.isnull().any(axis=1)

 

填充成功,数据里已无缺失值

1 #再次查看数据行 2 data_df.head()

1 #统计每一列空值的个数: 2 data_df.isnull().any().sum()

 

进行排序,因为我们只取成交量前十的十支股票来进行数据对比操作

 

1 #让值从大到小进行排序 2 df = data_df.sort_values(by='成交量',ascending=False) 3 data_df.head(10)

 

 

 

 保存处理后的数据

1 #保存处理后的数据 2 import pandas as pd 3 df = df.set_index('股票名称') 4 df.to_csv("data1.csv",encoding='utf-8') 5 data_df = pd.read_csv("data1.csv")

 

 

 

 读取处理后的数据

1 #读取处理后的数据 2 data_df = pd.read_csv('data1.csv') 3 df = data_df.dropna() 4 df1 = df[['股票名称', '成交量']] 5 data_df.sort_values(by='成交量',ascending=False) 6 #取前10条股票 7 df2 = df1.iloc[:10] 8 #打印出来显示检查结果是否正确 9 print(df2['股票名称'].values) 10 print(df2['成交量'].values)

 

 

 

 

 

 导入相关图包

绘制成交量柱形图进行对比

成交量第一的股票是京东方A

1 from pyecharts.charts import Bar 2 from pyecharts.globals import ThemeType 3 #设置风格 4 bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.ESSOS)) 5 #x轴数据 6 bar.add_xaxis(list(df2['股票名称'].values)) 7 #x轴数据 8 bar.add_yaxis("股票成交量情况",list(df2['成交量'].values)) 9 #设置标签配置项 10 bar.set_series_opts(label_opts=opts.LabelOpts(position="top")) 11 #设置标题 12 bar.set_global_opts(title_opts=opts.TitleOpts(title="成交量图表")) 13 #直接在notebook显示图表 14 bar.render_notebook()

绘制成交额柱形图进行对比

成交额最高的是股票是中远海控

1 from pyecharts import options as opts 2 from pyecharts.charts import Bar 3 4 #读取表 5 data_df = pd.read_csv('data1.csv') 6 df = data_df.dropna() 7 df1 = df[['股票名称', '成交额']] 8 data_df.sort_values(by='成交额',ascending=False) 9 #取前10条股票 10 df2 = df1.iloc[:10] 11 print(df2['股票名称'].values) 12 print(df2['成交额'].values) 13 #设置风格 14 bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK)) 15 #x轴数据 16 bar.add_xaxis(list(df2['股票名称'].values)) 17 #y轴数据 18 bar.add_yaxis("股票成交额情况",list(df2['成交额'].values)) 19 #设置标签配置项 20 bar.set_series_opts(label_opts=opts.LabelOpts(position="top")) 21 #设置标题 22 bar.set_global_opts(title_opts=opts.TitleOpts(title="成交额图表")) 23 #直接在notebook显示图表 24 bar.render_notebook()

 

 

 绘制市值图表 进行对比

市值最高的股票为中国石油

1 from pyecharts import options as opts 2 from pyecharts.charts import Bar 3 import pandas as pd 4 from pyecharts.globals import ThemeType 5 #读取表 6 data_df = pd.read_csv('data1.csv') 7 df = data_df.dropna() 8 df1 = df[['股票名称', '市值']] 9 data_df.sort_values(by='市值',ascending=False) 10 df2 = df1.iloc[:10] 11 #打印出股票名称与市值 查看数据是否正确 12 print(df2['股票名称'].values) 13 print(df2['市值'].values) 14 15 #设置风格 16 bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.ROMANTIC)) 17 #导入Y轴数据 18 y_data = [212966200430,9248273205,107335530969,73391902563,949878874875,317276616395,281115930557,12651913335,92773567583,12646728429] 19 #x轴数据,导入数据 20 bar.add_xaxis(list(df2['股票名称'].values)) 21 #y轴数据,导入数据 22 bar.add_yaxis("股票市值情况",y_data) 23 #设置数字显示位置 24 bar.set_series_opts(label_opts=opts.LabelOpts(position="right")) 25 #设置标题 26 bar.set_global_opts(title_opts=opts.TitleOpts(title="市值图表")) 27 bar.reversal_axis() 28 #直接在notebook显示图表 29 bar.render_notebook()

 

 

 

 

 

 绘制折线图,

对比这些股票的涨幅度情况

涨幅度最高的是中银绒业

1 import pyecharts.options as opts 2 from pyecharts.charts import Line 3 4 #查看数据得知涨跌幅情况,设置Y轴参数 5 y_data = [3.03,10.15,2,0,5.7,3.4,-0.63,2.31,6.03,3.39] 6 7 line=( 8 Line() 9 .set_global_opts( 10 tooltip_opts=opts.TooltipOpts(is_show=True), 11 xaxis_opts=opts.AxisOpts(type_="category"), 12 yaxis_opts=opts.AxisOpts( 13 type_="value", 14 axistick_opts=opts.AxisTickOpts(is_show=True), 15 splitline_opts=opts.SplitLineOpts(is_show=True), 16 ), 17 title_opts=opts.TitleOpts(title="单位(%)", pos_left="left"), 18 ) 19 .add_xaxis(list(df2['股票名称'].values)) 20 .add_yaxis( 21 series_name="涨跌幅折线图", 22 y_axis=y_data, 23 symbol="emptyCircle", 24 is_symbol_show=True, 25 label_opts=opts.LabelOpts(is_show=True), 26 27 ) 28 ) 29 #在notebook上直接显示图片 30 line.render_notebook()

绘制折线图,

对比年初至今的涨幅情况

涨幅最显著的股票是中远海控

1 import pyecharts.options as opts 2 from pyecharts.charts import Line 3 4 5 df = data_df.dropna() 6 df1 = df[['股票名称', '年初至今']] 7 data_df.sort_values(by='年初至今',ascending=False) 8 #取前10条股票 9 df2 = df1.iloc[:10] 10 #打印出股票名称与年初至今查看数据 11 print(df2['股票名称'].values) 12 print(df2['年初至今'].values) 13 #查看数据得知各股票年初至今的涨幅情况,设置Y轴参数 14 y_data = [3.65,104.72,9.55,37.61,25.06,111.96,18.41,-2.21,50.14,89.51] 15 16 line=( 17 Line() 18 .set_global_opts( 19 tooltip_opts=opts.TooltipOpts(is_show=True), 20 xaxis_opts=opts.AxisOpts(type_="category"), 21 yaxis_opts=opts.AxisOpts( 22 type_="value", 23 axistick_opts=opts.AxisTickOpts(is_show=True), 24 splitline_opts=opts.SplitLineOpts(is_show=True), 25 ), 26 #设置单位标题,并且显示在左上方 27 title_opts=opts.TitleOpts(title="单位(%)", pos_left="left"), 28 ) 29 #设置x轴 30 .add_xaxis(list(df2['股票名称'].values)) 31 #设置y轴 32 .add_yaxis( 33 #标题名称 34 series_name="年初至今涨幅情况折线图", 35 #赋值数据 36 y_axis=y_data, 37 symbol="emptyCircle", 38 is_symbol_show=True, 39 label_opts=opts.LabelOpts(is_show=True), 40 41 ) 42 ) 43 line.render_notebook()

 

 

 

 

 

 

 

 

绘制折线图,

对比各股票当前的价格

1 from pyecharts import options as opts 2 from pyecharts.charts import Bar 3 import pandas as pd 4 from pyecharts.globals import ThemeType 5 #读取表 6 data_df = pd.read_csv('data1.csv') 7 df = data_df.dropna() 8 df1 = df[['股票名称', '当前价']] 9 data_df.sort_values(by='当前价',ascending=False) 10 df2 = df1.iloc[:10] 11 #打印出股票名称与市值 查看数据是否正确 12 print(df2['股票名称'].values) 13 print(df2['当前价'].values) 14 #设置data_x数据 15 data_x = ["京东方A", "中银绒业", "TCL科技",] 16 #设置data_y数据 17 data_y = [6.12, 2.17, 7.65,1.61,5.19,25.88, 11, 2.21, 5.45, 8.85] 18 inner_data_pair = [list(z)for z in zip(data_x, data_y)] 19 20 outer_data_x = ["包钢股份","中国石油","中远海控","紫金矿业","二三四五","中国铝业","数码视讯"] 21 outer_data_y = [1.61, 5.19, 25.88, 11, 2.21, 5.45, 8.85] 22 outer_data_pair = [list(z) for z in zip(outer_data_x, outer_data_y)] 23 24 c = ( 25 Pie(init_opts=opts.InitOpts(width="1200px", height="800px")) 26 #设置内圈数据 27 .add( 28 series_name="当前价", 29 data_pair= inner_data_pair, 30 radius=[0, "30%"], 31 label_opts=opts.LabelOpts(position="inner"), 32 ) 33 #设置外圈数据 34 .add( 35 series_name="当前价", 36 radius=["40%","55%"], 37 data_pair=outer_data_pair, 38 label_opts=opts.LabelOpts( 39 position="outside", 40 formatter="{a|{a}}\n{hr|}\n {b|{b}: }{c} {per|{d}%} ", 41 background_color="#eee", 42 border_color="#aaa", 43 border_width=1, 44 border_radius=4, 45 46 rich={ 47 "a": {"color": "#999", "LineHeight": 22, "align": "center" }, 48 "abg": { 49 "backgroundColor": "#e3e3e3", 50 "width": "100%", 51 "align": "right", 52 "height": 22, 53 "borderRadius": [4, 4, 0, 0] 54 }, 55 "hr": { 56 "borderColor": "#aaa", 57 "width" :"100%", 58 "borderWidth": 0.5, 59 "height": 0, 60 }, 61 "b": {"fontSize": 16,"LineHeight": 33}, 62 "per": { 63 "color": "#eee", 64 "backgroundColor": "#334455", 65 "padding": [2, 4], 66 "borderRadius": 2, 67 }, 68 }, 69 ), 70 ) 71 .set_global_opts(legend_opts=opts.LegendOpts(pos_left="left", orient="vertical",)) 72 .set_series_opts( 73 tooltip_opts=opts.TooltipOpts( 74 trigger="item", formatter="{a} {b}: {c} ({d}%)", 75 76 ) 77 78 ) 79 .set_global_opts(title_opts=opts.TitleOpts(title='当前价位饼图', subtitle='元/股')) 80 ) 81 Pie.render_notebook()

 

 

 

 完整代码如下

1 import requests 2 import csv 3 4 5 6 #打开一个文件并命名 7 file = open('data.csv', mode='a', encoding='utf-8', newline='') 8 #使用DictWriter方法以字典形式写入 9 csv_write = csv.DictWriter(file, fieldnames=['股票代码', '股票名称', '当前价', '涨跌额', '涨跌幅', '年初至今', '成交量', '成交额', '换手率', '市盈率(TTM)', 10 '股息率', '市值']) 11 12 csv_write.writeheader() #写入一次表头数据 13 14 15 #原本网页一页最多只能显示90支股票数据,通过查看 结合页数计算 一共有4432支股票数据 修改url中的size 以达到获取全部股票数据 16 url = 'https://xueqiu.com/service/v5/stock/screener/quote/list?page=1&size=4432&order=desc&orderby=percent&order_by=percent&market=CN&type=sh_sz&_=1623304455997' 17 headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"}#遭遇反爬 加请求参数 18 # 发送网络请求 19 response = requests.get(url=url, headers=headers) 20 json_data = response.json() 21 22 # 数据筛选 23 data_list = json_data['data']['list'] 24 for data in data_list: #建立for循环 把列表数据遍历出来 25 # print(data) #解析数据 26 #设置data取键值对 27 data1 = data['symbol'] 28 data2 = data['name'] 29 data3 = data['current'] 30 data4 = data['chg'] 31 if data4: 32 if float(data4) > 0: 33 data4 = '+' + str(data4) 34 else: 35 data4 = str(data4) 36 data5 = str(data['percent']) + '%' 37 data6 = str(data['current_year_percent']) + '%' 38 data7 = data['volume'] 39 data8 = data['amount'] 40 data9 = str(data['turnover_rate'])+'%' 41 data10 = data['pe_ttm'] 42 data11 =data['dividend_yield'] 43 if data11: 44 data11 = str(data['dividend_yield'])+'%' 45 else: 46 data11 = None 47 data12 = data['market_capital'] 48 print(data1, data2, data3, data4, data5, data6, data7, data8, data9, data10, data11, data12,) 49 50 #数据保存 51 data_dict = {'股票代码': data1, '股票名称': data2, '当前价': data3, '涨跌额': data4, '涨跌幅': data5, '年初至今': data6, 52 '成交量': data7, '成交额':data8, '换手率': data9, '市盈率(TTM)': data10, '股息率': data11, '市值': data12, } 53 csv_write.writerow(data_dict) 54 55 56 57 import pandas as pd 58 import numpy as np 59 #加载csv数据 60 data_df = pd.read_csv('data.csv') 61 #显示头文件 62 data_df.head() 63 #判断数据行中书是否存在缺失值 64 data_df.isnull().any(axis=1) 65 #将缺失值都补为0 66 data_df = data_df.fillna(0) 67 #再次查看数据行中书是否修改成功 68 data_df.isnull().any(axis=1) 69 #再次查看数据行 70 data_df.head() 71 #统计每一列空值的个数: 72 data_df.isnull().any().sum() 73 #让值从大到小进行排序 74 df = data_df.sort_values(by='成交量',ascending=False) 75 data_df.head(10) 76 #保存处理后的数据 77 import pandas as pd 78 df = df.set_index('股票名称') 79 df.to_csv("data1.csv",encoding='utf-8') 80 data_df = pd.read_csv("data1.csv") 81 82 from pyecharts import options as opts 83 84 #读取处理后的数据 85 data_df = pd.read_csv('data1.csv') 86 df = data_df.dropna() 87 df1 = df[['股票名称', '成交量']] 88 data_df.sort_values(by='成交量',ascending=False) 89 #取前10条股票 90 df2 = df1.iloc[:10] 91 #打印出来显示检查结果是否正确 92 print(df2['股票名称'].values) 93 print(df2['成交量'].values) 94 95 from pyecharts.charts import Bar 96 from pyecharts.globals import ThemeType 97 #设置风格 98 bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.ESSOS)) 99 #x轴数据 100 bar.add_xaxis(list(df2['股票名称'].values)) 101 #x轴数据 102 bar.add_yaxis("股票成交量情况",list(df2['成交量'].values)) 103 #设置标签配置项 104 bar.set_series_opts(label_opts=opts.LabelOpts(position="top")) 105 #设置标题 106 bar.set_global_opts(title_opts=opts.TitleOpts(title="成交量图表")) 107 #直接在notebook显示图表 108 bar.render_notebook() 109 110 111 from pyecharts import options as opts 112 from pyecharts.charts import Bar 113 114 #读取表 115 data_df = pd.read_csv('data1.csv') 116 df = data_df.dropna() 117 df1 = df[['股票名称', '成交额']] 118 data_df.sort_values(by='成交额',ascending=False) 119 df2 = df1.iloc[:10] 120 print(df2['股票名称'].values) 121 print(df2['成交额'].values) 122 #设置风格 123 bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK)) 124 #x轴数据 125 bar.add_xaxis(list(df2['股票名称'].values)) 126 #y轴数据 127 bar.add_yaxis("股票成交额情况",list(df2['成交额'].values)) 128 #设置标签配置项 129 bar.set_series_opts(label_opts=opts.LabelOpts(position="top")) 130 #设置标题 131 bar.set_global_opts(title_opts=opts.TitleOpts(title="成交额图表")) 132 #直接在notebook显示图表 133 bar.render_notebook() 134 135 from pyecharts import options as opts 136 from pyecharts.charts import Bar 137 import pandas as pd 138 from pyecharts.globals import ThemeType 139 #读取表 140 data_df = pd.read_csv('data1.csv') 141 df = data_df.dropna() 142 df1 = df[['股票名称', '市值']] 143 data_df.sort_values(by='市值',ascending=False) 144 df2 = df1.iloc[:10] 145 #打印出股票名称与市值 查看数据是否正确 146 print(df2['股票名称'].values) 147 print(df2['市值'].values) 148 149 #设置风格 150 bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.ROMANTIC)) 151 #导入Y轴数据 152 y_data = [212966200430,9248273205,107335530969,73391902563,949878874875,317276616395,281115930557,12651913335,92773567583,12646728429] 153 #x轴数据,导入数据 154 bar.add_xaxis(list(df2['股票名称'].values)) 155 #y轴数据,导入数据 156 bar.add_yaxis("股票市值情况",y_data) 157 #设置数字显示位置 158 bar.set_series_opts(label_opts=opts.LabelOpts(position="right")) 159 #设置标题 160 bar.set_global_opts(title_opts=opts.TitleOpts(title="市值图表")) 161 bar.reversal_axis()#翻转xy轴 162 #直接在notebook显示图表 163 bar.render_notebook() 164 165 import pyecharts.options as opts 166 from pyecharts.charts import Line 167 168 169 170 #查看数据得知涨跌幅情况,设置Y轴参数 171 y_data = [3.03,10.15,2,0,5.7,3.4,-0.63,2.31,6.03,3.39] 172 173 line=( 174 Line() 175 .set_global_opts( 176 tooltip_opts=opts.TooltipOpts(is_show=True), 177 xaxis_opts=opts.AxisOpts(type_="category"), 178 yaxis_opts=opts.AxisOpts( 179 type_="value", 180 axistick_opts=opts.AxisTickOpts(is_show=True), 181 splitline_opts=opts.SplitLineOpts(is_show=True), 182 ), 183 title_opts=opts.TitleOpts(title="单位(%)", pos_left="left"), 184 ) 185 .add_xaxis(list(df2['股票名称'].values)) 186 .add_yaxis( 187 series_name="涨跌幅折线图", 188 y_axis=y_data, 189 symbol="emptyCircle", 190 is_symbol_show=True, 191 label_opts=opts.LabelOpts(is_show=True), 192 193 ) 194 ) 195 line.render_notebook() 196 197 198 import pyecharts.options as opts 199 from pyecharts.charts import Line 200 201 202 df = data_df.dropna() 203 df1 = df[['股票名称', '年初至今']] 204 data_df.sort_values(by='年初至今',ascending=False) 205 #取前10条股票 206 df2 = df1.iloc[:10] 207 #打印出股票名称与年初至今查看数据 208 print(df2['股票名称'].values) 209 print(df2['年初至今'].values) 210 #查看数据得知各股票年初至今的涨幅情况,设置Y轴参数 211 y_data = [3.65,104.72,9.55,37.61,25.06,111.96,18.41,-2.21,50.14,89.51] 212 213 line=( 214 Line() 215 .set_global_opts( 216 tooltip_opts=opts.TooltipOpts(is_show=True), 217 xaxis_opts=opts.AxisOpts(type_="category"), 218 yaxis_opts=opts.AxisOpts( 219 type_="value", 220 axistick_opts=opts.AxisTickOpts(is_show=True), 221 splitline_opts=opts.SplitLineOpts(is_show=True), 222 ), 223 #设置单位标题,并且显示在左上方 224 title_opts=opts.TitleOpts(title="单位(%)", pos_left="left"), 225 ) 226 #设置x轴 227 .add_xaxis(list(df2['股票名称'].values)) 228 #设置y轴 229 .add_yaxis( 230 #标题名称 231 series_name="年初至今涨幅情况折线图", 232 #赋值数据 233 y_axis=y_data, 234 symbol="emptyCircle", 235 is_symbol_show=True, 236 label_opts=opts.LabelOpts(is_show=True), 237 238 ) 239 ) 240 line.render_notebook() 241 242 243 244 from pyecharts import Pie 245 from pyecharts import options as opts 246 from pyecharts.charts import Bar 247 import pandas as pd 248 from pyecharts.globals import ThemeType 249 #读取表 250 data_df = pd.read_csv('data1.csv') 251 df = data_df.dropna() 252 df1 = df[['股票名称', '当前价']] 253 data_df.sort_values(by='当前价',ascending=False) 254 df2 = df1.iloc[:10] 255 #打印出股票名称与市值 查看数据是否正确 256 print(df2['股票名称'].values) 257 print(df2['当前价'].values) 258 #设置data_x数据 259 data_x = ["京东方A", "中银绒业", "TCL科技",] 260 #设置data_y数据 261 data_y = [6.12, 2.17, 7.65,1.61,5.19,25.88, 11, 2.21, 5.45, 8.85] 262 inner_data_pair = [list(z)for z in zip(data_x, data_y)] 263 264 outer_data_x = ["包钢股份","中国石油","中远海控","紫金矿业","二三四五","中国铝业","数码视讯"] 265 outer_data_y = [1.61, 5.19, 25.88, 11, 2.21, 5.45, 8.85] 266 outer_data_pair = [list(z) for z in zip(outer_data_x, outer_data_y)] 267 268 c = ( 269 Pie(init_opts=opts.InitOpts(width="1200px", height="800px")) 270 #设置内圈数据 271 .add( 272 series_name="当前价", 273 data_pair= inner_data_pair, 274 radius=[0, "30%"], 275 label_opts=opts.LabelOpts(position="inner"), 276 ) 277 #设置外圈数据 278 .add( 279 series_name="当前价", 280 radius=["40%","55%"], 281 data_pair=outer_data_pair, 282 label_opts=opts.LabelOpts( 283 position="outside", 284 formatter="{a|{a}}\n{hr|}\n {b|{b}: }{c} {per|{d}%} ", 285 background_color="#eee", 286 border_color="#aaa", 287 border_width=1, 288 border_radius=4, 289 290 rich={ 291 "a": {"color": "#999", "LineHeight": 22, "align": "center" }, 292 "abg": { 293 "backgroundColor": "#e3e3e3", 294 "width": "100%", 295 "align": "right", 296 "height": 22, 297 "borderRadius": [4, 4, 0, 0] 298 }, 299 "hr": { 300 "borderColor": "#aaa", 301 "width" :"100%", 302 "borderWidth": 0.5, 303 "height": 0, 304 }, 305 "b": {"fontSize": 16,"LineHeight": 33}, 306 "per": { 307 "color": "#eee", 308 "backgroundColor": "#334455", 309 "padding": [2, 4], 310 "borderRadius": 2, 311 }, 312 }, 313 ), 314 ) 315 .set_global_opts(legend_opts=opts.LegendOpts(pos_left="left", orient="vertical",)) 316 .set_series_opts( 317 tooltip_opts=opts.TooltipOpts( 318 trigger="item", formatter="{a} {b}: {c} ({d}%)", 319 320 ) 321 322 ) 323 .set_global_opts(title_opts=opts.TitleOpts(title='当前价位饼图', subtitle='元/股')) 324 ) 325 Pie.render_notebook()

 

 

 

总结:

 

本次爬取股票不仅包括了对网站的爬取,也包括对所爬取数据的清洗及分析,对我的个人能力是一次巨大的考验和提升。

技术难点:做图时导入我所构建的列表有数据不显示,找不出问题所在原因,只能构建一个data来引用

总体来说大部分难点都集中在pyecharts设置画图方面,但这部分原因也是基础不够扎实所导致,所以到最后还是没有达到所预期的目标,

编写过程还有许多漏洞是自己无法解决处理的的,代码没有达到要求,还有显示图片的问题,也查不到问题所在

通过这次作业才发现自己原来有这么多不足,知识点不全面,还有很大的提升空间,只有多写多看多用才能做到真正的掌握,有不懂的地方要及时解决虚心求教。

 

 

 

 

 

 

 

 

 

 

 

 

 


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3